home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
19
/
madtrb40.zip
/
LORES.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-03-22
|
4KB
|
175 lines
{
**************************************************************************
* Low Resolution Graphics *
* *
* Richard Chandler Raliegh, NC *
* PC World March 1986 pg. 305 *
* *
**************************************************************************
}
Program Lo_Res_Graphics;
type
scr = array[1..16000] of byte;
color = array[0..7] of byte;
const
blue : color = (1,16,9,24,18,51,26,110);
green : color = (2,37,31,10,39,102,85,115);
cyan : color = (17,32,25,52,94,86,116,125);
red : color = (4,58,62,12,66,126,131,132);
magenta : color = (5,19,73,59,71,27,78,130);
brown : color = (6,81,83,41,87,68,128,133);
gray : color = (0,8,100,7,92,107,90,135);
var
i,j,k,l : byte;
stop : char;
screen : scr absolute $B800:$0000;
color_table : array[0..135,0..1] of byte;
{----- Set Graphics Controller Chip for Lo-Res -----}
Procedure Set_Lo_Res;
type
reg = array[0..11] of byte;
const
modereg = $03D8;
colorreg = $03D9;
crtreg = $03D4;
crtdata = $03D5;
regdata : reg = (113,80,90,10,127,6,100,112,2,1,32,0);
var
i : byte;
j : integer;
modesave : byte absolute $0000:$0465;
colorsave : byte absolute $0000:$0466;
begin
modesave := 0;
port[modereg] := 0;
colorsave := 0;
port[colorreg] := 0;
for i := 0 to 11 do
begin
port[crtreg] := i;
port[crtdata] := regdata[i];
end;
for j := i to 16000 do
begin
screen[j] := 177;
j := j+1;
screen[j] := 0;
end;
modesave := 9;
port[modereg] := 9;
end;
{----- Restore Text Screen -----}
Procedure Set_Text_Mode;
type
reg = array[0..11] of byte;
const
crtreg = $03D4;
crtdata = $03D5;
regdata : reg = (113,80,90,10,31,6,25,28,2,7,6,7);
var
i : byte;
begin
for i := 0 to 11 do
begin
port[crtreg] := i;
port[crtdata] := regdata[i];
end;
textmode(3);
ClrScr;
end;
{----- Clears Screen -----}
Procedure Clear_Screen;
var
i : integer;
begin
for i := 1 to 16000 do
begin
i := i + 1;
screen[i] := 0;
end;
end;
{----- Set Color Table -----}
Procedure Set_Colors;
var
i,c,fg,bg : byte;
begin
c := 0;
for i := 0 to 255 do
begin
bg := i div 16;
fg := i mod 16;
if bg <= fg then
begin
color_table[c,0] := bg;
color_table[c,1] := fg;
c := c+1;
end;
end;
end;
{----- Plots Point(x,y) in color bg/fg -----}
Procedure Point(x,y,c:integer);
var
bg,fg : integer;
begin
bg := color_table[c,0];
fg := color_table[c,1];
screen[2*(x+1)+160*y] := fg + bg * 16;
end;
{----- Display colors in sequence -----}
Procedure Display_All_Colors;
var
i,j,k,l : integer;
begin
for i := 0 to 16 do
for j := 0 to 7 do
for k := 0 to 3 do
for l := 0 to 11 do
Point(i*4+k,j*12+l,8*i+j);
end;
{----- Display selected Palette -----}
Procedure Display_Palette;
var
i,j,k : integer;
begin
for i := 0 to 7 do
for j := 0 to 3 do
for k := 0 to 11 do
begin
Point(4*i+j,k,blue[i]);
Point(4*i+j,k+12,green[i]);
Point(4*i+j,k+24,cyan[i]);
Point(4*i+j,k+36,red[i]);
Point(4*i+j,k+48,magenta[i]);
Point(4*i+j,k+60,brown[i]);
Point(4*i+j,k+72,gray[i]);
end;
end;
{----- Main Program Begins Here -----}
Begin
Set_Lo_Res;
Set_Colors;
Display_All_Colors;
read(kbd, stop);
clear_screen;
Display_Palette;
read(kbd,stop);
Set_text_mode;
end.